/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model.dao;

import lib.*;
import model.dao.vo.*;

import java.sql.*;
import java.util.*;

/**
 *
 * @author felipe
 */
public class IngressoDAO extends DAO {

    public IngressoDAO()
    {
        super();
    }

    public Iterator<IngressoVO> listaIngresso(PedidoVO pedido)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("ingresso_id, exibicao_id, pedido_id, ingresso_valor")
                .from("ingresso")
                .where("pedido_id = " + pedido.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                List<IngressoVO> ingressos = new ArrayList<IngressoVO>();
                while(rs.next())
                {
                    IngressoVO i = new IngressoVO();
                    ExibicaoVO e = new ExibicaoVO();
                    e.setId(rs.getInt("exibicao_id"));
                    ExibicaoDAO exibicaoDAO = new ExibicaoDAO();
                    e = exibicaoDAO.buscaExibicao(e);
                    i.setExibicao(e);
                    i.setId(rs.getInt("ingresso_id"));
                    i.setPedido(pedido);
                    i.setValor(rs.getFloat("ingresso_valor"));
                    ingressos.add(i);
                }
                if ( ! ingressos.isEmpty()){
                    return (Iterator<IngressoVO>) ingressos.iterator();
                }
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error listaCategoria method " , e);
        }
        return null;
    }

    public Iterator<IngressoVO> listaIngresso(ExibicaoVO exibicao)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("ingresso_id, exibicao_id, pedido_id, ingresso_valor")
                .from("ingresso")
                .where("exibicao_id = " + exibicao.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                List<IngressoVO> ingressos = new ArrayList<IngressoVO>();
                while(rs.next())
                {
                    IngressoVO i = new IngressoVO();
                    PedidoVO p = new PedidoVO();
                    p.setId(rs.getInt("pedido_id"));
                    PedidoDAO pedidoDAO = new PedidoDAO();
                    p = pedidoDAO.buscaPedido(p);
                    i.setPedido(p);
                    i.setId(rs.getInt("ingresso_id"));
                    i.setExibicao(exibicao);
                    i.setValor(rs.getFloat("ingresso_valor"));
                    ingressos.add(i);
                }
                if ( ! ingressos.isEmpty()){
                    return (Iterator<IngressoVO>) ingressos.iterator();
                }
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error listaCategoria method " , e);
        }
        return null;
    }

    public IngressoVO buscaIngresso(IngressoVO ingresso)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("ingresso_id, exibicao_id, pedido_id, ingresso_valor")
                .from("ingresso")
                .where("ingresso_id = " + ingresso.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                ingresso.setId(rs.getInt("ingresso_id"));
                PedidoVO p = new PedidoVO();
                p.setId(rs.getInt("pedido_id"));
                PedidoDAO pedidoDAO = new PedidoDAO();
                p = pedidoDAO.buscaPedido(p);
                ingresso.setPedido(p);
                ExibicaoVO e = new ExibicaoVO();
                e.setId(rs.getInt("exibicao_id"));
                ExibicaoDAO exibicaoDAO = new ExibicaoDAO();
                e = exibicaoDAO.buscaExibicao(e);
                ingresso.setExibicao(e);
                ingresso.setValor(rs.getFloat("ingresso_valor"));
                return ingresso;
            }

        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error listaCategoria method " , e);
        }
        return null;
    }

    public boolean insereIngresso(IngressoVO ingresso)
    {
        SQL sql = Factory.createSQL();
        sql = sql.insert()
                .into("ingresso", "ingresso_id, exibicao_id, pedido_id, ingresso_valor")
                .value("NULL, " + ingresso.getExibicao().getId() + ", " + ingresso.getPedido().getId() + ", " + ingresso.getValor());
        int sucess =  this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

    public boolean alteraIngresso(IngressoVO ingresso)
    {
        SQL sql = Factory.createSQL();
        sql = sql.update("ingresso")
                .set("exibicao_id = " + ingresso.getExibicao().getId())
                .nset("pedido_id = " + ingresso.getPedido().getId())
                .nset("ingresso_valor = " + ingresso.getValor())
                .where("ingresso_id = " + ingresso.getId());

        int sucess =  this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

    public boolean apagaIngresso(IngressoVO ingresso)
    {
        SQL sql = Factory.createSQL();
        sql = sql.delete("ingresso")
                .where("ingresso_id = " + ingresso.getId());
        int sucess =  this.db.Update(sql.toString());
        if (sucess == 1)
        {
            return true;
        }
        return false;
    }

}
